package app.jfinal;

import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Model;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
 * JFinal ORM：
 * 特点：
 * <br>体现ActiveRecord设计思想：无需显示声明领域对象（Field、Get/Set等），随用随取。
 * <br>消除了POJO，节省冗余代码，通过继承持久化能力的父类天然实现了“富血模式”
 * <br>（目前支持DB反向工程，通过库表自动生成包含Get、Set的POJO代码）
 * <br>支持外挂SQL
 * <br>支持批处理（提供非循环的API级原语）
 * <br>支持分页（提供API）
 *
 * 优点
 * <br>半ORM，标准CRD无需编写Sql，开发效率高
 *
 * 缺点：
 * <br>需要维护模型的映射关系（相对于Record模式）
 *
 * DDD适配：
 * <br> 模型类 -> 领域的“聚合根”
 * <br> 类静态方法 -> 领域对外暴露的服务接口
 * <br> 类实例方法 -> 领域内部Repository实现
 * Created by shadowedge on 2020/2/13.
 */
public class City extends Model<City> {
    private static final Logger logger = LoggerFactory.getLogger(City.class);
    /**
     * 相当于领域内部对象，不直接对外暴露
     */
    private static final City dao = new City();

    public static void add(City city){
        city.save();//自动映射
    }

    /**
     * 静态方法相当于服务的【聚合层】，即领域外部只可以通过聚合调用领域内部方法
     * @param state
     * @return
     */
    public static City findByState(String state){
        return dao.findFirst("select * from city where state = ?",state);
    }

    public static void updateNameByState(String name,String state){
        City city = dao.findFirst("select * from city where state = ?",state);
        city.set("name",name);
        city.update();
    }

    public static void deleteByName(String name){
        Db.update("delete from city where name like ?",name);
    }
}
